home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / gas_251.zip / bin_251 / binutils / arparse.y < prev    next >
Text File  |  1993-01-06  |  3KB  |  201 lines

  1. %{
  2. /* arparse.y - Stange script language parser */
  3.  
  4. /*   Copyright (C) 1992 Free Software Foundation, Inc.
  5.  
  6. This file is part of GNU Binutils.
  7.  
  8. This program is free software; you can redistribute it and/or modify
  9. it under the terms of the GNU General Public License as published by
  10. the Free Software Foundation; either version 2 of the License, or
  11. (at your option) any later version.
  12.  
  13. This program is distributed in the hope that it will be useful,
  14. but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. GNU General Public License for more details.
  17.  
  18. You should have received a copy of the GNU General Public License
  19. along with this program; if not, write to the Free Software
  20. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  21.  
  22.  
  23. /* Contributed by Steve Chamberlain
  24.              sac@cygnus.com
  25.  
  26. */
  27. #define DONTDECLARE_MALLOC
  28. #include "bfd.h"
  29. #include <sysdep.h>
  30. #include "arsup.h"
  31. extern int verbose;
  32. %}
  33.  
  34. %union {
  35.   char *name;
  36. struct list *list ;
  37.  
  38. };
  39.  
  40. %token NEWLINE
  41. %token VERBOSE
  42. %token <name> FILENAME
  43. %token ADDLIB
  44. %token LIST
  45. %token ADDMOD
  46. %token CLEAR
  47. %token CREATE
  48. %token DELETE
  49. %token DIRECTORY
  50. %token END
  51. %token EXTRACT
  52. %token FULLDIR
  53. %token HELP
  54. %token QUIT
  55. %token REPLACE
  56. %token SAVE
  57. %token OPEN
  58.  
  59. %type <list> modulelist 
  60. %type <list> modulename
  61. %type <name> optional_filename
  62. %%
  63.  
  64. start:
  65.     { prompt(); } session
  66.     ;
  67.  
  68. session:
  69.         session command_line
  70.     |
  71.     ;
  72.  
  73. command_line:
  74.         command NEWLINE { prompt(); }
  75.  
  76. command:
  77.         open_command    
  78.     |    create_command    
  79.     |     verbose_command
  80.     |    directory_command
  81.     |    addlib_command
  82.     |    clear_command
  83.     |    addmod_command
  84.     |     save_command
  85.         |       extract_command
  86.     |    replace_command
  87.     |    delete_command
  88.     |    list_command
  89.     |     END     { ar_end(); return 0; }
  90.     |     error
  91.     |       FILENAME { yyerror("foo"); }
  92.     |
  93.     ;
  94.  
  95.  
  96. extract_command:
  97.                 EXTRACT modulename
  98.         { ar_extract($2); }
  99.     ;
  100.  
  101. replace_command:    
  102.         REPLACE modulename
  103.         { ar_replace($2); }
  104.     ;
  105.     
  106. clear_command:
  107.         CLEAR
  108.         { ar_clear(); }
  109.     ;
  110.  
  111. delete_command:
  112.         DELETE modulename
  113.         { ar_delete($2); }
  114.     ;
  115. addmod_command:
  116.     ADDMOD modulename
  117.         { ar_addmod($2); }
  118.     ;
  119.  
  120. list_command:    
  121.         LIST
  122.         { ar_list(); }
  123.     ;
  124.  
  125. save_command:    
  126.         SAVE
  127.         { ar_save(); }
  128.     ;
  129.  
  130.  
  131.  
  132. open_command:
  133.         OPEN FILENAME 
  134.         { ar_open($2,0); }
  135.     ;
  136.  
  137. create_command:
  138.         CREATE FILENAME 
  139.         { ar_open($2,1); }
  140.     ;
  141.  
  142.  
  143. addlib_command:
  144.         ADDLIB FILENAME modulelist
  145.         { ar_addlib($2,$3); }
  146.     ;
  147. directory_command:
  148.         DIRECTORY FILENAME modulelist optional_filename
  149.         { ar_directory($2, $3, $4); }
  150.     ;
  151.  
  152.  
  153.  
  154. optional_filename:
  155.         FILENAME
  156.         { $$ = $1; }
  157.     |    { $$ = 0; }
  158.     ;
  159.  
  160. modulelist:
  161.     '(' modulename ')' 
  162.         { $$ = $2; }
  163.     |
  164.         { $$ = 0; }
  165.     ;
  166.  
  167. modulename:
  168.         modulename optcomma FILENAME
  169.         {     struct list *n  = (struct list *) malloc(sizeof(struct list));
  170.             n->next = $1; 
  171.             n->name = $3;
  172.             $$ = n;
  173.          }
  174.     |    { $$ = 0; }
  175.     ;
  176.     
  177.  
  178. optcomma:
  179.         ','
  180.     |
  181.     ;
  182.     
  183.         
  184. verbose_command:
  185.     VERBOSE 
  186.         { verbose = !verbose; }
  187.     ;
  188.  
  189.  
  190. %%
  191.  
  192.  
  193. int
  194. yyerror(x)
  195. char *x;
  196. {
  197.   extern int linenumber;
  198.   printf("Synax error in archive script, line %d\n", linenumber + 1);
  199.   return 0;
  200. }
  201.